package cn.java.lambda;

/**
 * 对数组进行排序
 * @author 攀博课堂(www.pbteach.com)
 * @version 1.0
 **/
public class ArraySortDemo1 {

    public static void main(String[] args) {
        int[] datas = {7,8,7,6,5,4,3,4};
        System.out.println("开始升序排序...");
//        sort(datas);
//        sort(datas,true);//升序
//        sort(datas,new SortCompareImpl());//升序
        //匿名内部类，实现升序
//        sort(datas, new SortCompare() {
//            @Override
//            public boolean compare(int a, int b) {
//                return a>b;
//            }
//        });
        sort(datas,(int a,int b)->a>b);//升序
        sort(datas,(int a,int b)->{
            return a>b;
        });//升序

        for (int i = 0; i < datas.length; i++) {
            System.out.println(datas[i]);
        }
        System.out.println("开始降序排序...");
//        sort2(datas);
//        sort(datas,false);//降序
//        sort(datas,new SortCompareImpl2());//降序
        //匿名内部类，实现降序
//        sort(datas, new SortCompare() {
//            @Override
//            public boolean compare(int a, int b) {
//                return a<b;
//            }
//        });
        sort(datas,(int a,int b)->a<b);//降序
        for (int i = 0; i < datas.length; i++) {
            System.out.println(datas[i]);
        }

    }

    //使用冒泡排序，实现了升序
    public static void sort(int[] datas){
        for (int i = 0; i < datas.length; i++) {
            for (int j = i+1; j < datas.length; j++) {
                //两两元素比较，前一个数大于后一个数则交换位置，最终实现升序
                if(datas[i]>datas[j]){
                    //交换位置
                    int temp = datas[i];
                    datas[i] = datas[j];
                    datas[j] = temp;

                }
            }
        }

    }

    /**
     *
     * @param datas 数组
     * @param sortType true表示升序，false表示降序
     */
    public static void sort(int[] datas,boolean sortType){
        for (int i = 0; i < datas.length; i++) {
            for (int j = i+1; j < datas.length; j++) {
                if(sortType){
                    //两两元素比较，前一个数大于后一个数则交换位置，最终实现升序
                    if(datas[i]>datas[j]){
                        //交换位置
                        int temp = datas[i];
                        datas[i] = datas[j];
                        datas[j] = temp;

                    }
                }else{
                    //两两元素比较，前一个数小于后一个数则交换位置，最终实现降序
                    if(datas[i]<datas[j]){
                        //交换位置
                        int temp = datas[i];
                        datas[i] = datas[j];
                        datas[j] = temp;

                    }
                }

            }
        }

    }
    //增加一个参数，就是排序比较接口的对象
    public static void sort(int[] datas,SortCompare sortCompare){
        for (int i = 0; i < datas.length; i++) {
            for (int j = i+1; j < datas.length; j++) {
                if(sortCompare.compare(datas[i],datas[j])){
                    //交换位置
                    int temp = datas[i];
                    datas[i] = datas[j];
                    datas[j] = temp;

                }
            }
        }

    }

    //实现降序
    public static void sort2(int[] datas){
        for (int i = 0; i < datas.length; i++) {
            for (int j = i+1; j < datas.length; j++) {
                //两两元素比较，前一个数小于后一个数则交换位置，最终实现降序
                if(datas[i]<datas[j]){
                    //交换位置
                    int temp = datas[i];
                    datas[i] = datas[j];
                    datas[j] = temp;

                }
            }
        }

    }
}
